﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
using System.Configuration;
using System.Data.SqlClient;
using COMExcel = Microsoft.Office.Interop.Excel;
using dialog = Microsoft.Win32;
using System.Windows.Controls;
using System.ComponentModel;
using QuanLiThuVien.Source;
using QuanLiThuVien.LinkModel;

namespace QuanLiThuVien.Source
{
    class Export
    {

        #region exportExcel
        /// <summary>
        /// Xuất file excel
        /// </summary>
        /// <param name="title"></param>
        /// <param name="dataTable"></param>
        /// <returns></returns>
        static public bool exportExcel(string title, DataSet daSet)
        {
            bool result = false;

            //Khổi động chương trình excel.
            COMExcel.Application excelApp;

            //Thêm 1 file xls.
            COMExcel.Workbook excelWorkBook;

            //Thao tác với sheet.
            COMExcel.Worksheet excelSheet;

            //Tạo một đối tượng trống.
            object missVaule = System.Reflection.Missing.Value;

            //Khởi tạo các đối tượng.
            excelApp = new COMExcel.Application();
            excelWorkBook = excelApp.Workbooks.Add(missVaule);

            //Lấy sheet 1 làm việc.
            excelSheet = (COMExcel.Worksheet)excelWorkBook.Worksheets.get_Item(1);

            //Không cho hiện ứng dung excel.
            excelApp.Visible = false;
            int row = daSet.Tables[0].Rows.Count;
            int column = daSet.Tables[0].Columns.Count;
            int i;
            int j;

            dialog.SaveFileDialog f_dlg = new dialog.SaveFileDialog();
            f_dlg.Filter = "Excel file (*.xls)|*.xls";

            if (f_dlg.ShowDialog() == true)
            
            {
                //Đặt tiêu đề. Range: phạm vi.
                //get_range hàm lấy phạm vi lấy từ ô A1[1,1] đến ô gì đó [1,n].
                excelSheet.get_Range("A1", Convert.ToChar(column + 65) + "1").Merge(false);
                COMExcel.Range caption = excelSheet.get_Range("A1", Convert.ToChar(column + 65) + "1");
                caption.Select();
                caption.FormulaR1C1 = title;

                //căn lề cho tiêu đề.
                caption.HorizontalAlignment = COMExcel.Constants.xlCenter;
                caption.VerticalAlignment = COMExcel.Constants.xlCenter;
                caption.Font.Bold = true;
                caption.Font.Size = 20;
                caption.RowHeight = 50;

                //Đặt các header.
                COMExcel.Range header = excelSheet.get_Range("A2", Convert.ToChar(column + 65) + "2");
                header.Select();

                //căn lề cho header.
                header.HorizontalAlignment = COMExcel.Constants.xlCenter;
                header.Font.Bold = true;
                header.Font.Size = 13;

                //Điền các tiêu đề cho các cột.

                for (i = 0; i < column;i++ )
                
                {
                    excelSheet.Cells[2, i + 2] = daSet.Tables[0].Columns[i].ColumnName;
                }

                //Thêm cột STT số thứ tự.
                excelSheet.Cells[2, 1] = "STT";
                for (i = 0; i < row; i++)
               
                {
                    excelSheet.Cells[i + 3, 1] = i + 1;
                }

                //Điền dữ liệu vào sheet
                for (i = 0; i < row; i++)
               
                {
                    for (j = 0; j < column; j++)
                    {
                        excelSheet.Cells[i + 3, j + 2] = daSet.Tables[0].Rows[i][j];
                    }

                }

                //Autofix các cột.
                for (i = 0; i < row;i++ )
                
                {
                    ((COMExcel.Range)excelSheet.Cells[1, i + 1]).EntireColumn.AutoFit();
                }

                //Save file.
                excelWorkBook.SaveAs(f_dlg.FileName, COMExcel.XlFileFormat.xlWorkbookNormal, missVaule, missVaule, missVaule, missVaule, COMExcel.XlSaveAsAccessMode.xlExclusive, missVaule, missVaule, missVaule, missVaule, missVaule);
                excelWorkBook.Close(true, missVaule, missVaule);
                excelApp.Quit();

                //Giải phóng
                releaseObject(excelSheet);
                releaseObject(excelWorkBook);
                releaseObject(excelApp);
                result = true;
            }
            return result;
        }     
        #endregion

        #region releaseObject
        /// <summary>
        /// Giải phóng đối tượng
        /// </summary>
        /// <param name="obj"></param>
        static private void releaseObject(object obj)
        {
            try
           
            {
                //giải phóng đối tượng dạng COM.
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }

            catch (System.Exception ex)
           
            {
                obj = null;
                throw new Exception("Exception Occured while releasing object " + ex.ToString());
            }

            finally
            
            {
                GC.Collect();
            }

        }

        #endregion

        //#region getData
        ///// <summary>
        ///// lay du lieu vao datatable
        ///// </summary>
        ///// <param name="dataGrid"></param>
        ///// <param name="dataTable"></param>
        ///// <returns></returns>

        //static private DataTable GetData(SqlCommand cmd)
        //{
        //    DataTable dt = new DataTable();
        //    String strConnString = "server=TANTAI-PC\\SQLEXPRESS;user id=sa;" +
        //    "password= 123;initial catalog=QLTV";
        //    SqlConnection con = new SqlConnection(strConnString);
        //    SqlDataAdapter sda = new SqlDataAdapter();
        //    cmd.CommandType = CommandType.Text;
        //    cmd.Connection = con;
        //    try
        //    {
        //        con.Open();
        //        sda.SelectCommand = cmd;
        //        sda.Fill(dt);
        //        return dt;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //    finally
        //    {
        //        con.Close();
        //        sda.Dispose();
        //        con.Dispose();
        //    }
        //}

        //#endregion

        //#region BCTL

        //static public DataTable BCTL(string strMaBaoCao)
        //{
        //    //Get the data from database into datatable
        //    string strQuery = "select MaBCMS, MaTheLoai, Thang, Nam, LuotMuon, TongLuotMuon, Tile" +
        //                      " from BC_MUONSACH, CT_BC_MUONSACH" + "where BC_MUONSACH.MaBCMS=CT_BC_MUONSACH.MaBCMS and MaBCMS like(" + strMaBaoCao + ")";
        //    SqlCommand cmd = new SqlCommand(strQuery);
        //    DataTable dataTable = GetData(cmd);
        //    return dataTable;
        //}

        //#endregion
    }
}
